package com.ingenio.siot.adapter;

import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import com.ingenio.siot.Adapter;
import com.ingenio.siot.entity.Punto;
import com.mysql.jdbc.CallableStatement;
import com.mysql.jdbc.Connection;

public class TrazabilidadAdapter extends Adapter{
	
	public List<Punto> devolverTrazabilidad(Integer id_movil, Timestamp inicio, Timestamp fin){
		Connection conn = null;
		CallableStatement callableStatement = null;
		String storeProc = "{call TrazabilidadMovil(?,?,?)}";
		List<Punto> puntos = new ArrayList<Punto>();
		
    	try {
			conn = (Connection) abrirConexion();
			callableStatement = (CallableStatement) conn.prepareCall(storeProc);
			callableStatement.setInt(1, id_movil);
			callableStatement.setTimestamp(2, inicio);
			callableStatement.setTimestamp(3, fin);
			ResultSet rs = callableStatement.executeQuery();
			Punto p = null;
			while(rs.next()){
				Timestamp ts = rs.getTimestamp("fechaObservacion");
				Double latitud = rs.getDouble("latitud");
				Double longitud = rs.getDouble("longitud");
				p = new Punto(null, latitud, longitud);
				p.setId_movil(id_movil);
				p.setFecha(ts);
				puntos.add(p);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
    		cerrarConexion(conn);
    	}
    	return puntos;
	}
	
	public static void main(String args[]){
		//Ejemplo de aplicacion
		TrazabilidadAdapter ta = new TrazabilidadAdapter();
		Calendar ini = new GregorianCalendar(2014,8,23,15,31,12);
		Calendar fin = new GregorianCalendar(2014,8,23,15,32,18);
		Timestamp inicio = new Timestamp(ini.getTime().getTime());
		Timestamp fina = new Timestamp(fin.getTime().getTime());
		List<Punto> puntos = ta.devolverTrazabilidad(3, inicio, fina);
		
		for (Punto p : puntos) {
			System.out.println(p.getId_movil() +" "+p.getLatitud()+" "+p.getLongitud()+" "+p.getFecha() );
		}
	}

}

